python是一個優秀的程式語言,有眾多的套件,相關文件與範例也很多。
上面有一個臨時的需求,希望把SQLite內的資料抓出來並做成Word,下圖是要求的Word檔格式,要用表格,有圖片的還要秀出來
原本的想法是用SQL抓出資料後,再一筆一筆貼到Word上,後來想一想,不如用python試試。
首先安裝python-docx套件
pip3 install python-docx
完整python程式如下:
import sqlite3
from docx.shared import Pt
from docx import Document
document = Document()
root_path = "F:\\0_Project\\TestSystem\\app"
conn = sqlite3.connect( root_path + '\\db\\ams.db')
cur = conn.cursor()
sql01 = """
select
uuid,id, name, type, status,
custodian, custody_unit, custody_photo
from fh_items_basic
where status='正常'
and type in ('PC','NB')
order by id;
"""
sqlite_data = cur.execute(sql01)
for row in sqlite_data :
table = document.add_table(rows=4, cols=2,style = 'Table Grid')
# 合併儲存格
table.cell(0,0).merge(table.cell(0,1))
table.cell(0,0).text = "ID:" + row[1]
table.cell(1,0).text = "類型:" + row[3]
table.cell(1,1).text = "狀況:" + row[4]
table.cell(2,0).text = "保管人:" + row[5]
table.cell(2,1).text = "保管單位:" + row[6]
# 合併儲存格
table.cell(3,0).merge(table.cell(3,1))
if row[7] != 'NO' :
#在 Table Cell內插入圖片
cell_paragraph = table.cell(3,0).paragraphs[0]
run = cell_paragraph.add_run()
run.add_picture(root_path + '\\server\\img\\' + row[7] ,width=Inches(3.25))
#增加段落
paragraph = document.add_paragraph(' ')
conn.close()
# 分頁
document.add_page_break()
# 存檔
document.save('data.docx')
SQLite的程式網路已經有很多的說明,在此就不另外說明
因為Word內有表格,所以使用add_table函數來產生表格,下面範例會產生一個4x2的表格
table = document.add_table(rows=4, cols=2,style = 'Table Grid')
因為表格的第一列與最後一列需要合併欄位,所以用megre將其合併,就像Excel的儲存格一樣
table.cell(0,0).merge(table.cell(0,1))
table.cell(3,0).merge(table.cell(3,1))
用cell(row,column).text在指定的欄位填入值
table.cell(0,0).text = "ID:" + row[1]
在表格的最後一列取出段落(paragraphs),並且用add_picture來插入圖片到段落內
cell_paragraph = table.cell(3,0).paragraphs[0]
run = cell_paragraph.add_run()
run.add_picture(root_path + '\\server\\img\\' + row[7] ,width=Inches(3.25))